/**
 * @file image_io.cpp
 * @brief 图像输入/输出模块实现
 * 
 * 实现 PNG 图像加载和 PNG 保存功能。
 * 依赖 lodepng 库进行 PNG 解码。
 * 
 * @note 支持 PC 和 AURIX 双平台，通过 platform.h 进行平台切换
 */
#include "image_io.h"

#if CURRENT_PLATFORM == PLATFORM_PC
    // PC 平台使用 lodepng 库
    #include "lodepng.h"
    #include <vector>
    #include <iostream>
#elif CURRENT_PLATFORM == PLATFORM_AURIX
    // AURIX 平台预留摄像头接口
    // TODO: 包含 AURIX 摄像头驱动头文件
    #include <cstring>  // for memcpy
#endif

bool loadGrayPNG(const char* filename, unsigned char image[IMAGE_HEIGHT][IMAGE_WIDTH]) 
{
#if CURRENT_PLATFORM == PLATFORM_PC
    // PC 平台：从文件加载 PNG
    std::vector<unsigned char> buffer;
    unsigned int width, height;
    unsigned error = lodepng::decode(buffer, width, height, filename, LCT_GREY, 8);
    
    if (error) {
        LOG("PNG decode error");
        return false;
    }
    
    if (width != IMAGE_WIDTH || height != IMAGE_HEIGHT) {
        LOG("Invalid image size");
        return false;
    }
    
    // 复制像素数据
    for (int y = 0; y < IMAGE_HEIGHT; y++) {
        for (int x = 0; x < IMAGE_WIDTH; x++) {
            image[y][x] = buffer[y * IMAGE_WIDTH + x];
        }
    }
    
    LOG("PNG loaded successfully");
    return true;
    
#elif CURRENT_PLATFORM == PLATFORM_AURIX
    // AURIX 平台：从摄像头缓冲区获取图像
    LOG("Loading image from camera buffer");
    
    // 检查是否为摄像头缓冲区路径
    if (strcmp(filename, "camera_buffer") == 0) {
        // TODO: 实现 AURIX 摄像头图像获取
        // 示例：假设摄像头数据已经在指定内存区域
        // memcpy(image, camera_buffer, 640 * 480);
        
        LOG("Camera image loaded");
        return true;
    }
    
    LOG("Unsupported image source");
    return false;
#endif
}

bool savePNG(const char* filename, const unsigned char image[][SCALED_WIDTH], int height, int width)
{
#if CURRENT_PLATFORM == PLATFORM_PC
    // PC 平台：保存 PNG 文件用于调试
    std::vector<unsigned char> png;
    unsigned error = lodepng::encode(png, image[0], width, height, LCT_GREY, 8);
    if (error) {
        LOG("PNG encode error");
        return false;
    }
    
    if (!lodepng::save_file(png, filename)) {
        LOG("PNG saved successfully");
        return true;
    } else {
        LOG("PNG save error");
        return false;
    }
    
#elif CURRENT_PLATFORM == PLATFORM_AURIX
    // AURIX 平台：通常不需要保存功能，可以留空或记录日志
    LOG("Save function not implemented for AURIX platform");
    return false;
#endif
}